var NumberKit = {};

/**
 * @description number 常用方法
 *
 * toFixed(x)	    把数字转换为字符串，结果为小数点后有指定位数的数字。
 *
 * @description Math 对象常用方法
 *
 * ceil(x)	    上舍入
 * floor(x)	    下舍入
 * round(x)	    四舍五入
 * random()	    返回 0 ~ 1 之间的随机数
 * pow(x,y)	    返回 x 的 y 次幂
 * max(x,y,z,...,n)	    返回 x,y,z,...,n 中的最高值
 * min(x,y,z,...,n)	    返回 x,y,z,...,n中的最低值
 */

NumberKit.number = {};

/**
 * @description 转换成int类型
 * @param {String Number} input 输入的数
 * @param {Number} defaultValue 转换失败时的默认值
 * @return {int}
 */
NumberKit.number.parseInt = function (input, defaultValue) {
    var value = parseInt(input);
    if (isNaN(value) || Infinity == value) {
        defaultValue = defaultValue || 0;
        return defaultValue;
    }
    return value;
};

/**
 * @description 转换成float类型
 * @param {String Number} input 输入的数
 * @param {String Number} defaultValue 转换失败时的默认值
 * @return {float}
 */
NumberKit.number.parseFloat = function (input, defaultValue) {
    var value = parseFloat(input);
    if (isNaN(value) || Infinity == value) {
        defaultValue = defaultValue || 0;
        return defaultValue;
    }
    return value;
};

/**
 * @description 保留几位小数（四舍五入法）
 * @param {String Number} input 输入的数
 * @param {String Number} digits 小数位数，默认0
 * @return {String}
 */
NumberKit.number.toFixed = function (input, digits) {
    input = NumberKit.number.parseFloat(input, 0);
    if (input == 0) return 0;
    return input.toFixed(digits || 0);
};

/**
 * @description 保留几位小数（四舍五入法）
 * @param {String Number} input 输入的数
 * @param {String Number} digits 小数位数，默认0
 * @return {Number}
 */
NumberKit.number.round = function (input, digits) {
    return Math.round(input * Math.pow(10, digits)) / Math.pow(10, digits);
};

/**
 * @description 保留几位小数（进一法）
 * @param {String Number} input 输入的数
 * @param {String Number} digits 小数位数，默认0
 * @return {Number}
 */
NumberKit.number.ceil = function (input, digits) {
    return Math.ceil(input * Math.pow(10, digits)) / Math.pow(10, digits);
};

/**
 * @description 保留几位小数（舍一法）
 * @param {String Number} input 输入的数
 * @param {String Number} digits 小数位数，默认0
 * @return {Number}
 */
NumberKit.number.floor = function (input, digits) {
    return Math.floor(input * Math.pow(10, digits)) / Math.pow(10, digits);
};

/**
 * @description 多个数相乘
 * @param {Number String} args 乘数
 * @return {Number} 积
 */
NumberKit.number.mul = function (args){
    var m = 0, ret = 1;
    for(var i = 0; i < arguments.length; i++){
        arguments[i] = arguments[i].toString();
        try{
            m += arguments[i].split(".")[1].length;
        } catch(e){
            m += 0;
        }
        ret = arguments[i].replace(".","") * ret;
    }
    ret = ret / Math.pow(10,m);
    return ret;
};

/**
 * @description 多个数相加
 * @param {Number String} args 加数
 * @return {Number} 和
 */
NumberKit.number.add = function (args){
    var m = 0, ret = 0;
    for(var i = 0; i < arguments.length; i++){
        arguments[i] = arguments[i].toString();
        try{
            m += arguments[i].split(".")[1].length;
        } catch(e){
            m += 0;
        }
    }
    for(var j = 0; j < arguments.length; j++){
        ret = arguments[j] * Math.pow(10,m) + ret;
    }
    ret = ret / Math.pow(10,m);
    return ret;
};

/**
 * @description 除法
 * @param arg1 除以 arg2
 * @return {Number} 和
 */
NumberKit.number.div = function (arg1,arg2){
    var t1=0,t2=0,r1,r2;
    try{t1=arg1.toString().split(".")[1].length}catch(e){}
    try{t2=arg2.toString().split(".")[1].length}catch(e){}
    with(Math) {
        r1 = Number(arg1.toString().replace(".", ""))
        r2 = Number(arg2.toString().replace(".", ""))
        return (r1 / r2) * pow(10, t2 - t1);
    }
};

/**
 * @description 获取两个数之间的随机数
 * @param {Number} min
 * @param {Number} max
 * @return {Number}
 */
NumberKit.number.getRandom = function (min, max) {
    var random = 0;
    random = min + Math.random() * (max - min);
    return Math.round(random);
};